using System;
using System.Threading.Tasks;
using TapSDK.Compliance;
using TapSDK.Login;


// using TapTap.AntiAddiction.Model;

namespace Gj.TapTap
{
    public class Antiaddiction
    {
        public static Action<RealInfo> Callback;

        public static void Enter()
        {
            // AntiAddictionUIKit.EnterGame();
        }

        public static void Leave()
        {
            // AntiAddictionUIKit.LeaveGame();
        }

        public static void Init()
        {
            Action<int, string> callback = (code, errorMsg) =>
            {
                // code == 500;   // 登录成功
                // code == 1000;  // 用户登出
                // code == 1001;  // 切换账号
                // code == 1030;  // 未成年玩家当前无法进行游戏
                // code == 1050;  // 时长限制
                // code == 9002;  // 实名过程中点击了关闭实名窗
                // 500	LOGIN_SUCCESS	玩家未受到限制，正常进入游戏
                // 1000	EXITED	退出防沉迷认证及检查，当开发者调用 Exit 接口时或用户认证信息无效时触发，游戏应返回到登录页
                // 1001	SWITCH_ACCOUNT	用户点击切换账号，游戏应返回到登录页
                // 1030	PERIOD_RESTRICT	用户当前时间无法进行游戏，此时用户只能退出游戏或切换账号
                // 1050	DURATION_LIMIT	用户无可玩时长，此时用户只能退出游戏或切换账号
                // 1100	AGE_LIMIT	当前用户因触发应用设置的年龄限制无法进入游戏
                // 1200	INVALID_CLIENT_OR_NETWORK_ERROR	数据请求失败，游戏需检查当前设置的应用信息是否正确及判断当前网络连接是否正常
                // 9002
                UnityEngine.Debug.LogFormat($"taptap anti code: {code} error Message: {errorMsg}");
                Project.ProjectUpdate.Queue.Enqueue(async () =>
                {
                    if (Callback != null)
                    {
                        if (code is 500 or 1030 or 1050 or 1100)
                        {
                            var info = await Info();
                            if (code == 1030)
                            {
                                info.IsUnderAge = true;
                            }
                        
                            if (code == 1100)
                            {
                                info.IsUnderAge = true;
                            }

                            if (code == 1050)
                            {
                                info.IsMoreTime = true;
                            }
                            Callback(info);
                        }
                        else
                        {
                            Callback(null);
                        }
                    }
                });
                
            };
            TapTapCompliance.RegisterComplianceCallback(callback);
        }
        public static void Valid(TapTapAccount account, Action<RealInfo> callback)
        {
            Callback = callback;
            // 注意唯一标识参数值长度不能超过 64 字符
            // 直接进入游戏
            if (account != null) {
                string userIdentifier = account.unionId;
                TapTapCompliance.Startup(userIdentifier);
            }
        }

        // 是否允许消费
        public static void PayInfo(int amount, Action<bool> callback)
        {
            // AntiAddictionUIKit.CheckPayLimit(amount,
            //     (result) => {
            //         // status 为 1 时可以支付
            //         int status = result.status;
            //         if (status == 1) {
            //             // 可以进行支付
            //             callback(true);
            //         }
            //         else
            //         {
            //             callback(false);
            //         }
            //     },
            //     (exception) => {
            //         // 处理异常
            //         callback(false);
            //     }
            // );
        }

        public static void Pay(int amount)
        {
            // AntiAddictionUIKit.SubmitPayResult(amount,
            //     () => {
            //         // 成功
            //     }, (exception) => {
            //         // 处理异常
            //     }
            // );
        }

        public static void ShowRealError()
        {
//             AntiAddictionConfig config = new AntiAddictionConfig()
//             {
//                 gameId = "your_client_id",      // TapTap 开发者中心对应 Client ID
//                 showSwitchAccount = false,      // 是否显示切换账号按钮
//                 useAgeRange = true 		// 是否使用年龄段信息
//             };         
// //设置配置及回调，callback 为开发者实现的自定义防沉迷回调对象
//             AntiAddictionUIKit.Init(config);
//             AntiAddictionUIKit.SetAntiAddictionCallback(callback);
        }

        public static async Task<RealInfo> Info()
        {
            var info = new RealInfo();
            info.IsUnderAge = await TapTapCompliance.GetAgeRange() < 16;
            info.RemainingTime = await TapTapCompliance.GetRemainingTime();
            return info;
        }

        public static void Exit()
        {
            Callback = null;
            TapTapCompliance.Exit();
        }

        public class RealInfo
        {
            public bool IsUnderAge;
            public int RemainingTime;
            public bool IsMoreTime;
        }
    }
}